"""
ASGI config for kafkatool project.

It exposes the ASGI callable as a module-level variable named ``application``.

For more information on this file, see
https://docs.djangoproject.com/en/5.2/howto/deployment/asgi/
"""

import os
import django
from django.core.asgi import get_asgi_application
from channels.routing import ProtocolTypeRouter, URLRouter
from channels.auth import AuthMiddlewareStack

# 设置Django配置模块环境变量
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'kafkatool.settings')

# 初始化Django应用，必须在导入其他Django模块之前调用
django.setup()

# 在Django初始化后导入WebSocket路由配置
# 这样可以确保Django模型和其他组件已经正确加载
import kafkatool.routing

# 创建ASGI应用实例，支持HTTP和WebSocket协议
# ProtocolTypeRouter根据协议类型将请求路由到不同的处理器
application = ProtocolTypeRouter({
    # HTTP协议处理器，处理常规的HTTP请求（API接口、静态文件等）
    "http": get_asgi_application(),
    
    # WebSocket协议处理器，处理实时通信连接
    "websocket": AuthMiddlewareStack(  # 添加认证中间件栈（如果需要用户认证）
        URLRouter(
            # 使用WebSocket URL路由配置，将WebSocket连接路由到相应的消费者
            kafkatool.routing.websocket_urlpatterns
        )
    ),
})